iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Software Development

練習java30天系列 第 15

Day16練習java-二元搜尋法(已完工)

  • 分享至 

  • xImage
  •  

今天來練習一個比之前循序搜尋法還要好用的二元搜尋法,程式的時間複雜度比之前學得還要來的少,是一項蠻有效率的方法,基本上分成兩個階段,第一階段先做泡沫排序法之後再做搜尋,而搜尋的方式也蠻特別的,要找的資料必須跟中間的數字來做比較,前置作業先做排序是有好處的,讓資料由小到大先排好,之後都跟中間的來比,如果比中間的資料來得小,代表是在前半部分,相反的如果比中間的資料來得大,就代表位於後半的部分,這對於資料龐大來找的話是非常有效率的方式,直接砍掉一半的可能,緊接著再從剩下一半再找中間的數來比較,又能再砍掉一半的可能,那要怎麼知道裡面沒有要找的資料呢?會假設兩個變數,一個是下界,一個是上界,如果當上界大於下界,就代表裡面沒有你要找的那筆資料。

雖然道理簡單,但是程式碼卻不知道為什麼,一直卡關,可能我很菜吧,目前遇到的問題如下:

https://ithelp.ithome.com.tw/upload/images/20201001/20130684c52R0A7Fa4.pnghttps://ithelp.ithome.com.tw/upload/images/20201001/20130684MG3bfbUkrA.png

主要兩個問題無法克服,第一個是n值取不出來,第二個是因為我是用隨機產生,因此會有數字相同的問題發生,這樣找尋的方式會不會出錯,還在研究中TUT

昨天真的是debug到懷疑人生,但是好險最終還是發現了問題的所在,由於這次遇到的問題真的有點特別,於是我決定在下一篇中來好好談談這個問題怎麼發生的,以及我最後是如何解決的。


上一篇
Day15 練習java-挑選排序法
下一篇
Day17練習java-二元搜尋法debug
系列文
練習java30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言